<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>

    <script>

        function fun() {
            var num = 100;
            function foo() {
                console.log('打印：' + num);
            }
            return foo;
        }

        // var fn = fun();
        // fn();
        /*
        fun()(); 执行过程
        先 执行 fun() 函数 返回 => foo函数
        再 执行 foo() 函数 得到结果
        */
        fun()();


        // 2. 通过闭包修改函数中的数据
        /*function fun1() {
            var num = 20;
            //修改函数里面的数据
            function foo1(newNum) {
                num = newNum;
                console.log(num);
            }
            // 供外界访问
            function getNum() {
                return num;
            }
            return foo1;
        }
        var fn1 = fun1();
        fn1(100);
    */

        // 2.1
        function fun1() {
            var num = 20;
            //修改函数里面的数据
            function foo1(newNum) {
                num = newNum;
                console.log(num);
            }
            // 供外界访问
            function getNum() {
                return num;
            }
            return [foo1, getNum];
        }

        var fn3 = fun1(); // 数组
        console.log(fn3[1]()); // 获取函数中的 num 数据
        
        fn3[0](150); // 设置函数中的 num 数据
       
        console.log(fn3[1]()); //再次 获取函数中的 num 数据

        //结论： 可以同闭包 获取 和 设置 函数中的数据

    </script>

</body>

</html>